package org.fisco.bcos.sdk.demo.contract;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.fisco.bcos.sdk.v3.client.Client;
import org.fisco.bcos.sdk.v3.codec.datatypes.DynamicArray;
import org.fisco.bcos.sdk.v3.codec.datatypes.Event;
import org.fisco.bcos.sdk.v3.codec.datatypes.Function;
import org.fisco.bcos.sdk.v3.codec.datatypes.Type;
import org.fisco.bcos.sdk.v3.codec.datatypes.TypeReference;
import org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Int256;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Int32;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Int64;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint32;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple2;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple3;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple4;
import org.fisco.bcos.sdk.v3.contract.Contract;
import org.fisco.bcos.sdk.v3.crypto.CryptoSuite;
import org.fisco.bcos.sdk.v3.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.v3.model.CryptoType;
import org.fisco.bcos.sdk.v3.model.TransactionReceipt;
import org.fisco.bcos.sdk.v3.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.v3.transaction.model.exception.ContractException;

@SuppressWarnings("unchecked")
public class TableTestV320 extends Contract {
    public static final String[] BINARY_ARRAY = {
        "60806040523480156200001157600080fd5b5060408051600380825260808201909252600091816020015b60608152602001906001900390816200002a579050509050604051806040016040528060048152602001636e616d6560e01b81525081600081518110620000755762000075620002d0565b60200260200101819052506040518060400160405280600381526020016261676560e81b81525081600181518110620000b257620000b2620002d0565b60200260200101819052506040518060400160405280600681526020016573746174757360d01b81525081600281518110620000f257620000f2620002d0565b6020026020010181905250600060405180606001604052806001808111156200011f576200011f620002e6565b8152602001604051806040016040528060028152602001611a5960f21b81525081526020018381525090506110026001600160a01b03166375b14eea6040518060400160405280600a8152602001690745f74657374563332360b41b815250836040518363ffffffff1660e01b81526004016200019e9291906200034c565b6020604051808303816000875af1158015620001be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e4919062000414565b50604080518082018252600a8152690745f74657374563332360b41b6020820152905163f23f63c960e01b81526000916110029163f23f63c9916200022c9160040162000440565b602060405180830381865afa1580156200024a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000270919062000455565b90506001600160a01b038116620002a75760405162461bcd60e51b8152602060048201526000602482015260440160405180910390fd5b600080546001600160a01b0319166001600160a01b039290921691909117905550620004809050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000815180845260005b81811015620003245760208185018101518683018201520162000306565b8181111562000337576000602083870101525b50601f01601f19169290920160200192915050565b604081526000620003616040830185620002fc565b6020838203818501528451600281106200038b57634e487b7160e01b600052602160045260246000fd5b8083525080850151606082840152620003a86060840182620002fc565b90506040860151838203604085015281935080518083528383019450838160051b840101848301925060005b828110156200040657601f19858303018752620003f3828551620002fc565b96860196938601939150600101620003d4565b509998505050505050505050565b6000602082840312156200042757600080fd5b81518060030b81146200043957600080fd5b9392505050565b602081526000620004396020830184620002fc565b6000602082840312156200046857600080fd5b81516001600160a01b03811681146200043957600080fd5b611f1a80620004906000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063b2beeb9011610066578063b2beeb9014610138578063b7c288361461014b578063db5c2fab1461016c578063eb18b4871461017f578063f575cda01461019257600080fd5b806328fca8b5146100a3578063428ffbbb146100ce57806355f150f1146100ee5780638cc77e7e1461010457806391a5f94c14610125575b600080fd5b6100b66100b136600461158e565b6101ba565b60405160039190910b81526020015b60405180910390f35b6100e16100dc366004611601565b6103a8565b6040516100c591906116e5565b6100f66106cb565b6040516100c59291906116f8565b610117610112366004611740565b61076f565b6040519081526020016100c5565b6100b661013336600461158e565b610885565b6100b6610146366004611601565b610a76565b61015e61015936600461184e565b610cd1565b6040516100c5929190611869565b6100b661017a366004611601565b610e19565b6100b661018d36600461184e565b61112b565b6101a56101a0366004611601565b611249565b60405163ffffffff90911681526020016100c5565b604080518082019182905263ecb6fef360e01b909152600784900b604482015260009081908061100f63ecb6fef360648301600060405180830381865afa158015610209573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261023191908101906118d3565b81526040805160038082526080820190925260209092019190816020015b606081526020019060019003908161024f57905050815250905083816020015160008151811061028157610281611907565b60200260200101819052508281602001516001815181106102a4576102a4611907565b6020026020010181905250604051806040016040528060048152602001631a5b9a5d60e21b81525081602001516002815181106102e3576102e3611907565b602090810291909101015260008054604051635c6e105f60e01b81526001600160a01b0390911690635c6e105f9061031f908590600401611965565b6020604051808303816000875af115801561033e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610362919061199e565b604051600382900b81529091507fc57b01fa77f41df77eaab79a0e2623fab2e7ae3e9530d9b1cab225ad65f2b7ce906020015b60405180910390a19150505b9392505050565b60408051808201825260008082526101f46020830152825160028082526060828101909552816020015b6103f76040805160608101909152806000815260200160608152602001606081525090565b8152602001906001900390816103d25790505060408051606081018252600081528151808301835260028152611a5960f21b602080830191909152820152815163ecb6fef360e01b8152600789900b6004820152929350919082019061100f9063ecb6fef390602401600060405180830381865afa15801561047d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104a591908101906118d3565b815250816000815181106104bb576104bb611907565b60209081029190910101526040805160608101909152806003815260408051808201825260028152611a5960f21b602080830191909152830152805163ecb6fef360e01b8152600788900b600482015291019061100f9063ecb6fef390602401600060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261056091908101906118d3565b8152508160018151811061057657610576611907565b602090810291909101015260008054604051632a92244160e01b81526001600160a01b0390911690632a922441906105b49085908790600401611a61565b600060405180830381865afa1580156105d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105f99190810190611b9e565b9050600081516001600160401b03811115610616576106166114a3565b60405190808252806020026020018201604052801561064957816020015b60608152602001906001900390816106345790505b50905060005b81518110156106c05782818151811061066a5761066a611907565b60200260200101516020015160008151811061068857610688611907565b60200260200101518282815181106106a2576106a2611907565b602002602001018190525080806106b890611c4e565b91505061064f565b509695505050505050565b604080518082018252600a8152690745f74657374563332360b41b6020820152905163b8764d3f60e01b815260609182916000916110029163b8764d3f9161071591600401611c77565b600060405180830381865afa158015610732573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261075a9190810190611c8a565b90508060200151816040015192509250509091565b600060ff8416158061078457508360ff166001145b61078d57600080fd5b60008460ff166001141561079f575060015b600060405180606001604052808360018111156107be576107be6119c1565b815260208101879052604090810186905251633ad8a77560e11b8152909150600090611002906375b14eea906107fa908b908690600401611d31565b6020604051808303816000875af1158015610819573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083d919061199e565b604051600382900b81529091507fb5636cd912a73dcdb5b570dbe331dfa3e6435c93e029e642def2c8e40dacf2109060200160405180910390a160030b979650505050505050565b60408051600280825260608201909252600091829190816020015b60408051808201909152606080825260208201528152602001906001900390816108a0575050604080516080810182526004918101918252636e616d6560e01b606082015290815260208101869052815191925090829060009061090657610906611907565b602002602001018190525060405180604001604052806040518060400160405280600381526020016261676560e81b8152508152602001848152508160018151811061095457610954611907565b60209081029190910101526000805460405163ecb6fef360e01b8152600788900b60048201526001600160a01b03909116906341ffd75f9061100f9063ecb6fef390602401600060405180830381865afa1580156109b6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109de91908101906118d3565b846040518363ffffffff1660e01b81526004016109fc929190611e0d565b6020604051808303816000875af1158015610a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3f919061199e565b604051600382900b81529091507f8e5890af40fc24a059396aca2f83d6ce41fcef086876548fa4fb8ec27e9d292a90602001610395565b60408051808201825260008082526101f4602083015282516002808252606082019094529092839190816020015b610ac96040805160608101909152806000815260200160608152602001606081525090565b815260200190600190039081610aa45790505060408051606081018252600081528151808301835260028152611a5960f21b602080830191909152820152815163ecb6fef360e01b8152600789900b6004820152929350919082019061100f9063ecb6fef390602401600060405180830381865afa158015610b4f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b779190",
        "8101906118d3565b81525081600081518110610b8d57610b8d611907565b60209081029190910101526040805160608101909152806003815260408051808201825260028152611a5960f21b602080830191909152830152805163ecb6fef360e01b8152600788900b600482015291019061100f9063ecb6fef390602401600060405180830381865afa158015610c0a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c3291908101906118d3565b81525081600181518110610c4857610c48611907565b602090810291909101015260005460405163a726071760e01b81526001600160a01b039091169063a726071790610c859084908690600401611a61565b6020604051808303816000875af1158015610ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc8919061199e565b95945050505050565b6000805460405163ecb6fef360e01b8152600784900b6004820152606092839290916001600160a01b039091169063fcd7e3c19061100f9063ecb6fef390602401600060405180830381865afa158015610d2f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d5791908101906118d3565b6040518263ffffffff1660e01b8152600401610d739190611c77565b600060405180830381865afa158015610d90573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610db89190810190611e32565b905060608082602001515160031415610e0e578260200151600081518110610de257610de2611907565b602002602001015191508260200151600181518110610e0357610e03611907565b602002602001015190505b909590945092505050565b604080516001808252818301909252600091829190816020015b6040805180820190915260608082526020820152815260200190600190039081610e3357905050905060405180604001604052806040518060400160405280600681526020016573746174757360d01b8152508152602001604051806040016040528060078152602001661d5c19185d195960ca1b81525081525081600081518110610ec157610ec1611907565b60209081029190910181019190915260408051808201825260008082526101f4828501528251600280825260608201909452919390929082015b610f206040805160608101909152806000815260200160608152602001606081525090565b815260200190600190039081610efb5790505060408051606081018252600081528151808301835260028152611a5960f21b602080830191909152820152815163ecb6fef360e01b815260078a900b6004820152929350919082019061100f9063ecb6fef390602401600060405180830381865afa158015610fa6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fce91908101906118d3565b81525081600081518110610fe457610fe4611907565b60209081029190910101526040805160608101909152806003815260408051808201825260028152611a5960f21b602080830191909152830152805163ecb6fef360e01b8152600789900b600482015291019061100f9063ecb6fef390602401600060405180830381865afa158015611061573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261108991908101906118d3565b8152508160018151811061109f5761109f611907565b6020908102919091010152600054604051634c9260bf60e11b81526001600160a01b0390911690639924c17e906110de90849086908890600401611e66565b6020604051808303816000875af11580156110fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611121919061199e565b9695505050505050565b6000805460405163ecb6fef360e01b8152600784900b600482015282916001600160a01b0316906380599e4b9061100f9063ecb6fef390602401600060405180830381865afa158015611182573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111aa91908101906118d3565b6040518263ffffffff1660e01b81526004016111c69190611c77565b6020604051808303816000875af11580156111e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611209919061199e565b604051600382900b81529091507f4b930e280fe29620bdff00c88155d46d6d82a39f45dd5c3ea114dc31573581129060200160405180910390a192915050565b60408051600280825260608201909252600091829190816020015b6112896040805160608101909152806000815260200160608152602001606081525090565b8152602001906001900390816112645790505060408051606081018252600081528151808301835260028152611a5960f21b602080830191909152820152815163ecb6fef360e01b8152600788900b6004820152929350919082019061100f9063ecb6fef390602401600060405180830381865afa15801561130f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261133791908101906118d3565b8152508160008151811061134d5761134d611907565b60209081029190910101526040805160608101909152806003815260408051808201825260028152611a5960f21b602080830191909152830152805163ecb6fef360e01b8152600787900b600482015291019061100f9063ecb6fef390602401600060405180830381865afa1580156113ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113f291908101906118d3565b8152508160018151811061140857611408611907565b602090810291909101015260005460405163da46335f60e01b81526001600160a01b039091169063da46335f90611443908490600401611eab565b602060405180830381865afa158015611460573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114849190611ebe565b949350505050565b8035600781900b811461149e57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156114db576114db6114a3565b60405290565b604051601f8201601f191681016001600160401b0381118282101715611509576115096114a3565b604052919050565b60006001600160401b0382111561152a5761152a6114a3565b50601f01601f191660200190565b600082601f83011261154957600080fd5b813561155c61155782611511565b6114e1565b81815284602083860101111561157157600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156115a357600080fd5b6115ac8461148c565b925060208401356001600160401b03808211156115c857600080fd5b6115d487838801611538565b935060408601359150808211156115ea57600080fd5b506115f786828701611538565b9150509250925092565b6000806040838503121561161457600080fd5b61161d8361148c565b915061162b6020840161148c565b90509250929050565b60005b8381101561164f578181015183820152602001611637565b8381111561165e576000848401525b50505050565b6000815180845261167c816020860160208601611634565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b858110156116d85782840389526116c6848351611664565b988501989350908401906001016116ae565b5091979650505050505050565b6020815260006103a16020830184611690565b60408152600061170b6040830185611664565b8281036020840152610cc88185611690565b60006001600160401b03821115611736576117366114a3565b5060051b60200190565b6000806000806080858703121561175657600080fd5b84356001600160401b038082111561176d57600080fd5b61177988838901611538565b9550602091508187013560ff8116811461179257600080fd5b94506040870135818111156117a657600080fd5b6117b289828a01611538565b9450506060870135818111156117c757600080fd5b8701601f810189136117d857600080fd5b80356117e66115578261171d565b81815260059190911b8201840190848101908b83111561180557600080fd5b8584015b8381101561183d578035868111156118215760008081fd5b61182f8e8983890101611538565b845250918601918601611809565b50989b979a50959850505050505050565b60006020828403121561186057600080fd5b6103a18261148c565b60408152600061187c6040830185611664565b8281036020840152610cc88185611664565b600082601f83011261189f57600080fd5b81516118ad61155782611511565b8181528460208386010111156118c257600080fd5b611484826020830160208701611634565b6000602082840312156118e557600080fd5b81516001600160401b038111156118fb57600080fd5b6114848482850161188e565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501808196508360051b8101915082860160005b858110156116d8578284038952611953848351611664565b9885019893509084019060010161193b565b6020815260008251604060208401526119816060840182611664565b90506020840151601f19848303016040850152610cc8828261191d565b6000602082840312156119b057600080fd5b81518060030b81146103a157600080fd5b634e487b7160e01b600052602160045260246000fd5b600081518084526020808501808196508360051b8101915082860160005b858110156116d857828403895281516060815160098110611a1857611a186119c1565b865281870151878701829052611a3082880182611664565b91505060408083015192508682038188015250611a4d8183611664565b9a87019a95505050908401906001016119f5565b606081526000611a7460608301856119d7565b90506103a16020830184805163ffffffff908116835260209182015116910152565b600082601f830112611aa757600080fd5b81516020611ab76115578361171d565b82815260059290921b84018101918181019086841115611ad657600080fd5b8286015b848110156106c05780516001600160401b03811115611af95760008081fd5b611b078986838b010161188e565b845250918301918301611ada565b600060408284031215611b2757600080fd5b604051604081016001600160401b038282108183111715611b4a57611b4a6114a3565b816040528293508451915080821115611b6257600080fd5b611b6e8683870161188e565b83",
        "526020850151915080821115611b8457600080fd5b50611b9185828601611a96565b6020830152505092915050565b60006020808385031215611bb157600080fd5b82516001600160401b0380821115611bc857600080fd5b818501915085601f830112611bdc57600080fd5b8151611bea6115578261171d565b81815260059190911b83018401908481019088831115611c0957600080fd5b8585015b83811015611c4157805185811115611c255760008081fd5b611c338b89838a0101611b15565b845250918601918601611c0d565b5098975050505050505050565b6000600019821415611c7057634e487b7160e01b600052601160045260246000fd5b5060010190565b6020815260006103a16020830184611664565b600060208284031215611c9c57600080fd5b81516001600160401b0380821115611cb357600080fd5b9083019060608286031215611cc757600080fd5b611ccf6114b9565b825160028110611cde57600080fd5b8152602083015182811115611cf257600080fd5b611cfe8782860161188e565b602083015250604083015182811115611d1657600080fd5b611d2287828601611a96565b60408301525095945050505050565b604081526000611d446040830185611664565b8281036020840152835160028110611d5e57611d5e6119c1565b80825250602084015160606020830152611d7b6060830182611664565b905060408501518282036040840152611d94828261191d565b979650505050505050565b600081518084526020808501808196508360051b8101915082860160005b858110156116d8578284038952815160408151818752611ddf82880182611664565b91505086820151915085810387870152611df98183611664565b9a87019a9550505090840190600101611dbd565b604081526000611e206040830185611664565b8281036020840152610cc88185611d9f565b600060208284031215611e4457600080fd5b81516001600160401b03811115611e5a57600080fd5b61148484828501611b15565b608081526000611e7960808301866119d7565b611e996020840186805163ffffffff908116835260209182015116910152565b82810360608401526111218185611d9f565b6020815260006103a160208301846119d7565b600060208284031215611ed057600080fd5b815163ffffffff811681146103a157600080fdfea26469706673582212201cfd83a6d75c68fc71771f13f9bb36998dd924335864c70cf128c7165b39a37164736f6c634300080b0033"
    };

    public static final String BINARY =
            org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {
        "60806040523480156200001157600080fd5b5060408051600380825260808201909252600091816020015b60608152602001906001900390816200002a579050509050604051806040016040528060048152602001636e616d6560e01b81525081600081518110620000755762000075620002d1565b60200260200101819052506040518060400160405280600381526020016261676560e81b81525081600181518110620000b257620000b2620002d1565b60200260200101819052506040518060400160405280600681526020016573746174757360d01b81525081600281518110620000f257620000f2620002d1565b6020026020010181905250600060405180606001604052806001808111156200011f576200011f620002e7565b8152602001604051806040016040528060028152602001611a5960f21b81525081526020018381525090506110026001600160a01b031663f6d7201d6040518060400160405280600a8152602001690745f74657374563332360b41b815250836040518363ffffffff1660e01b81526004016200019e9291906200034d565b6020604051808303816000875af1158015620001be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e4919062000415565b50604080518082018252600a8152690745f74657374563332360b41b602082015290516359a48b6560e01b8152600091611002916359a48b65916200022c9160040162000441565b602060405180830381865afa1580156200024a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000270919062000456565b90506001600160a01b038116620002a857604051636381e58960e11b8152602060048201526000602482015260440160405180910390fd5b600080546001600160a01b0319166001600160a01b039290921691909117905550620004819050565b63b95aa35560e01b600052603260045260246000fd5b63b95aa35560e01b600052602160045260246000fd5b6000815180845260005b81811015620003255760208185018101518683018201520162000307565b8181111562000338576000602083870101525b50601f01601f19169290920160200192915050565b604081526000620003626040830185620002fd565b6020838203818501528451600281106200038c5763b95aa35560e01b600052602160045260246000fd5b8083525080850151606082840152620003a96060840182620002fd565b90506040860151838203604085015281935080518083528383019450838160051b840101848301925060005b828110156200040757601f19858303018752620003f4828551620002fd565b96860196938601939150600101620003d5565b509998505050505050505050565b6000602082840312156200042857600080fd5b81518060030b81146200043a57600080fd5b9392505050565b6020815260006200043a6020830184620002fd565b6000602082840312156200046957600080fd5b81516001600160a01b03811681146200043a57600080fd5b611f2a80620004916000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638af4602c116100665780638af4602c1461014d578063909fb8bd1461016e578063ca6bdea714610181578063d16fa02b14610194578063d5c698f3146101a757600080fd5b80630575a21d146100a35780632682a07c146100c957806334e5f909146100f1578063753582a41461011157806382083cca14610127575b600080fd5b6100b66100b136600461159a565b6101ba565b6040519081526020015b60405180910390f35b6100dc6100d73660046116bf565b6102d0565b60405163ffffffff90911681526020016100c0565b6101046100ff3660046116bf565b610513565b6040516100c091906117a6565b610119610836565b6040516100c09291906117b9565b61013a6101353660046116bf565b6108da565b60405160039190910b81526020016100c0565b61016061015b3660046117de565b610b35565b6040516100c09291906117f9565b61013a61017c3660046117de565b610c7d565b61013a61018f36600461181e565b610d9b565b61013a6101a236600461181e565b610f89565b61013a6101b53660046116bf565b61117a565b600060ff841615806101cf57508360ff166001145b6101d857600080fd5b60008460ff16600114156101ea575060015b6000604051806060016040528083600181111561020957610209611891565b81526020810187905260409081018690525163f6d7201d60e01b81529091506000906110029063f6d7201d90610245908b9086906004016118fc565b6020604051808303816000875af1158015610264573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610288919061196a565b604051600382900b81529091507f38411b2ef21b6826a8b9f48a1baa6b3388c3354ebdc5db749b35830ec581722d9060200160405180910390a160030b979650505050505050565b60408051600280825260608201909252600091829190816020015b6103106040805160608101909152806000815260200160608152602001606081525090565b8152602001906001900390816102eb5790505060408051606081018252600081528151808301835260028152611a5960f21b60208083019190915282015281516361cd959d60e11b8152600788900b6004820152929350919082019061100f9063c39b2b3a90602401600060405180830381865afa158015610396573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103be91908101906119d2565b815250816000815181106103d4576103d4611a06565b60209081029190910101526040805160608101909152806003815260408051808201825260028152611a5960f21b60208083019190915283015280516361cd959d60e11b8152600787900b600482015291019061100f9063c39b2b3a90602401600060405180830381865afa158015610451573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047991908101906119d2565b8152508160018151811061048f5761048f611a06565b6020908102919091010152600054604051633a081ed360e11b81526001600160a01b03909116906374103da6906104ca908490600401611aa6565b602060405180830381865afa1580156104e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050b9190611ab9565b949350505050565b60408051808201825260008082526101f46020830152825160028082526060828101909552816020015b6105626040805160608101909152806000815260200160608152602001606081525090565b81526020019060019003908161053d5790505060408051606081018252600081528151808301835260028152611a5960f21b60208083019190915282015281516361cd959d60e11b8152600789900b6004820152929350919082019061100f9063c39b2b3a90602401600060405180830381865afa1580156105e8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261061091908101906119d2565b8152508160008151811061062657610626611a06565b60209081029190910101526040805160608101909152806003815260408051808201825260028152611a5960f21b60208083019190915283015280516361cd959d60e11b8152600788900b600482015291019061100f9063c39b2b3a90602401600060405180830381865afa1580156106a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106cb91908101906119d2565b815250816001815181106106e1576106e1611a06565b60209081029190910101526000805460405163087c36d360e01b81526001600160a01b039091169063087c36d39061071f9085908790600401611adf565b600060405180830381865afa15801561073c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107649190810190611c1c565b9050600081516001600160401b038111156107815761078161148c565b6040519080825280602002602001820160405280156107b457816020015b606081526020019060019003908161079f5790505b50905060005b815181101561082b578281815181106107d5576107d5611a06565b6020026020010151602001516000815181106107f3576107f3611a06565b602002602001015182828151811061080d5761080d611a06565b6020026020010181905250808061082390611ccc565b9150506107ba565b509695505050505050565b604080518082018252600a8152690745f74657374563332360b41b602082015290516361bb9b7160e11b815260609182916000916110029163c37736e29161088091600401611cf5565b600060405180830381865afa15801561089d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108c59190810190611d08565b90508060200151816040015192509250509091565b60408051808201825260008082526101f4602083015282516002808252606082019094529092839190816020015b61092d6040805160608101909152806000815260200160608152602001606081525090565b8152602001906001900390816109085790505060408051606081018252600081528151808301835260028152611a5960f21b60208083019190915282015281516361cd959d60e11b8152600789900b6004820152929350919082019061100f9063c39b2b3a90602401600060405180830381865afa1580156109b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109db91908101906119d2565b815250816000815181106109f1576109f1611a06565b60209081029190910101526040805160608101909152806003815260408051808201825260028152611a5960f21b60208083019190915283015280516361cd959d60e11b8152600788900b600482015291019061100f9063c39b2b3a90602401600060405180830381865afa158015610a6e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a9691908101906119d2565b81525081600181518110610aac57610aac611a06565b60209081029190910101526000546040516339c964e160e01b81526001600160a01b03909116906339c964e190610ae99084908690600401611adf565b6020604051808303816000875af1158015610b08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2c919061196a565b95945050505050565b600080546040516361cd959d60e11b8152600784900b6004820152606092839290916001600160a01b0390911690635b325d789061100f9063",
        "c39b2b3a90602401600060405180830381865afa158015610b93573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bbb91908101906119d2565b6040518263ffffffff1660e01b8152600401610bd79190611cf5565b600060405180830381865afa158015610bf4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c1c9190810190611daf565b905060608082602001515160031415610c72578260200151600081518110610c4657610c46611a06565b602002602001015191508260200151600181518110610c6757610c67611a06565b602002602001015190505b909590945092505050565b600080546040516361cd959d60e11b8152600784900b600482015282916001600160a01b0316906386b733f99061100f9063c39b2b3a90602401600060405180830381865afa158015610cd4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cfc91908101906119d2565b6040518263ffffffff1660e01b8152600401610d189190611cf5565b6020604051808303816000875af1158015610d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5b919061196a565b604051600382900b81529091507fe7769b56c2afa8e40381956f76b91d9ec19c34c0a81791702fdcae68e35a72719060200160405180910390a192915050565b60408051808201918290526361cd959d60e11b909152600784900b604482015260009081908061100f63c39b2b3a60648301600060405180830381865afa158015610dea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e1291908101906119d2565b81526040805160038082526080820190925260209092019190816020015b6060815260200190600190039081610e30579050508152509050838160200151600081518110610e6257610e62611a06565b6020026020010181905250828160200151600181518110610e8557610e85611a06565b6020026020010181905250604051806040016040528060048152602001631a5b9a5d60e21b8152508160200151600281518110610ec457610ec4611a06565b6020908102919091010152600080546040516304c8b95360e41b81526001600160a01b0390911690634c8b953090610f00908590600401611de3565b6020604051808303816000875af1158015610f1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f43919061196a565b604051600382900b81529091507fdfc533ec2b52797a1229dc2495dbd3f4948f7c4c982ec077ad9d80810ec5c1f9906020015b60405180910390a19150505b9392505050565b60408051600280825260608201909252600091829190816020015b6040805180820190915260608082526020820152815260200190600190039081610fa4575050604080516080810182526004918101918252636e616d6560e01b606082015290815260208101869052815191925090829060009061100a5761100a611a06565b602002602001018190525060405180604001604052806040518060400160405280600381526020016261676560e81b8152508152602001848152508160018151811061105857611058611a06565b6020908102919091010152600080546040516361cd959d60e11b8152600788900b60048201526001600160a01b03909116906301fa804c9061100f9063c39b2b3a90602401600060405180830381865afa1580156110ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110e291908101906119d2565b846040518363ffffffff1660e01b8152600401611100929190611e8a565b6020604051808303816000875af115801561111f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611143919061196a565b604051600382900b81529091507fd72ab475a08df05fbd4f7f8cb4db1ad9dbdc26f54437fa6794acd97357779d2a90602001610f76565b604080516001808252818301909252600091829190816020015b604080518082019091526060808252602082015281526020019060019003908161119457905050905060405180604001604052806040518060400160405280600681526020016573746174757360d01b8152508152602001604051806040016040528060078152602001661d5c19185d195960ca1b8152508152508160008151811061122257611222611a06565b60209081029190910181019190915260408051808201825260008082526101f4828501528251600280825260608201909452919390929082015b6112816040805160608101909152806000815260200160608152602001606081525090565b81526020019060019003908161125c5790505060408051606081018252600081528151808301835260028152611a5960f21b60208083019190915282015281516361cd959d60e11b815260078a900b6004820152929350919082019061100f9063c39b2b3a90602401600060405180830381865afa158015611307573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261132f91908101906119d2565b8152508160008151811061134557611345611a06565b60209081029190910101526040805160608101909152806003815260408051808201825260028152611a5960f21b60208083019190915283015280516361cd959d60e11b8152600789900b600482015291019061100f9063c39b2b3a90602401600060405180830381865afa1580156113c2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113ea91908101906119d2565b8152508160018151811061140057611400611a06565b6020908102919091010152600054604051630341b28360e01b81526001600160a01b0390911690630341b2839061143f90849086908890600401611eaf565b6020604051808303816000875af115801561145e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611482919061196a565b9695505050505050565b63b95aa35560e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156114c4576114c461148c565b60405290565b604051601f8201601f191681016001600160401b03811182821017156114f2576114f261148c565b604052919050565b60006001600160401b038211156115135761151361148c565b50601f01601f191660200190565b600082601f83011261153257600080fd5b8135611545611540826114fa565b6114ca565b81815284602083860101111561155a57600080fd5b816020850160208301376000918101602001919091529392505050565b60006001600160401b038211156115905761159061148c565b5060051b60200190565b600080600080608085870312156115b057600080fd5b84356001600160401b03808211156115c757600080fd5b6115d388838901611521565b9550602091508187013560ff811681146115ec57600080fd5b945060408701358181111561160057600080fd5b61160c89828a01611521565b94505060608701358181111561162157600080fd5b8701601f8101891361163257600080fd5b803561164061154082611577565b81815260059190911b8201840190848101908b83111561165f57600080fd5b8584015b838110156116975780358681111561167b5760008081fd5b6116898e8983890101611521565b845250918601918601611663565b50989b979a50959850505050505050565b8035600781900b81146116ba57600080fd5b919050565b600080604083850312156116d257600080fd5b6116db836116a8565b91506116e9602084016116a8565b90509250929050565b60005b8381101561170d5781810151838201526020016116f5565b8381111561171c576000848401525b50505050565b6000815180845261173a8160208601602086016116f2565b601f01601f19169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b8481101561179957601f19868403018952611787838351611722565b9884019892509083019060010161176b565b5090979650505050505050565b602081526000610f82602083018461174e565b6040815260006117cc6040830185611722565b8281036020840152610b2c818561174e565b6000602082840312156117f057600080fd5b610f82826116a8565b60408152600061180c6040830185611722565b8281036020840152610b2c8185611722565b60008060006060848603121561183357600080fd5b61183c846116a8565b925060208401356001600160401b038082111561185857600080fd5b61186487838801611521565b9350604086013591508082111561187a57600080fd5b5061188786828701611521565b9150509250925092565b63b95aa35560e01b600052602160045260246000fd5b600081518084526020808501808196508360051b8101915082860160005b858110156118ef5782840389526118dd848351611722565b988501989350908401906001016118c5565b5091979650505050505050565b60408152600061190f6040830185611722565b828103602084015283516002811061192957611929611891565b808252506020840151606060208301526119466060830182611722565b90506040850151828203604084015261195f82826118a7565b979650505050505050565b60006020828403121561197c57600080fd5b81518060030b8114610f8257600080fd5b600082601f83011261199e57600080fd5b81516119ac611540826114fa565b8181528460208386010111156119c157600080fd5b61050b8260208301602087016116f2565b6000602082840312156119e457600080fd5b81516001600160401b038111156119fa57600080fd5b61050b8482850161198d565b63b95aa35560e01b600052603260045260246000fd5b600081518084526020808501808196508360051b8101915082860160005b858110156118ef57828403895281516060815160098110611a5d57611a5d611891565b865281870151878701829052611a7582880182611722565b91505060408083015192508682038188015250611a928183611722565b9a87019a9550505090840190600101611a3a565b602081526000610f826020830184611a1c565b600060208284031215611acb57600080fd5b815163ffffffff81168114610f8257600080fd5b606081526000611af26060830185611a1c565b9050610f826020830184805163ffffffff908116835260209182015116910152565b600082601f830112611b2557600080fd5b81516020611b3561154083611577565b82815260059290921b84018101918181019086841115611b5457600080fd5b8286015b8481101561082b5780516001600160401b0381111561",
        "1b775760008081fd5b611b858986838b010161198d565b845250918301918301611b58565b600060408284031215611ba557600080fd5b604051604081016001600160401b038282108183111715611bc857611bc861148c565b816040528293508451915080821115611be057600080fd5b611bec8683870161198d565b83526020850151915080821115611c0257600080fd5b50611c0f85828601611b14565b6020830152505092915050565b60006020808385031215611c2f57600080fd5b82516001600160401b0380821115611c4657600080fd5b818501915085601f830112611c5a57600080fd5b8151611c6861154082611577565b81815260059190911b83018401908481019088831115611c8757600080fd5b8585015b83811015611cbf57805185811115611ca35760008081fd5b611cb18b89838a0101611b93565b845250918601918601611c8b565b5098975050505050505050565b6000600019821415611cee5763b95aa35560e01b600052601160045260246000fd5b5060010190565b602081526000610f826020830184611722565b600060208284031215611d1a57600080fd5b81516001600160401b0380821115611d3157600080fd5b9083019060608286031215611d4557600080fd5b611d4d6114a2565b825160028110611d5c57600080fd5b8152602083015182811115611d7057600080fd5b611d7c8782860161198d565b602083015250604083015182811115611d9457600080fd5b611da087828601611b14565b60408301525095945050505050565b600060208284031215611dc157600080fd5b81516001600160401b03811115611dd757600080fd5b61050b84828501611b93565b602081526000825160406020840152611dff6060840182611722565b90506020840151601f19848303016040850152610b2c82826118a7565b600081518084526020808501808196508360051b8101915082860160005b858110156118ef578284038952815160408151818752611e5c82880182611722565b91505086820151915085810387870152611e768183611722565b9a87019a9550505090840190600101611e3a565b604081526000611e9d6040830185611722565b8281036020840152610b2c8185611e1c565b608081526000611ec26080830186611a1c565b611ee26020840186805163ffffffff908116835260209182015116910152565b82810360608401526114828185611e1c56fea26469706673582212207a9706593e86626a336f99d884057071d1ddd3117bd12d924e0e83b0ed70d52464736f6c634300080b0033"
    };

    public static final String SM_BINARY =
            org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {
        "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"count\",\"type\":\"int256\"}],\"name\":\"CreateResult\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"count\",\"type\":\"int256\"}],\"name\":\"InsertResult\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"count\",\"type\":\"int256\"}],\"name\":\"RemoveResult\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"count\",\"type\":\"int256\"}],\"name\":\"UpdateResult\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"int64\",\"name\":\"idLow\",\"type\":\"int64\"},{\"internalType\":\"int64\",\"name\":\"idHigh\",\"type\":\"int64\"}],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"tableName\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"keyOrder\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"fields\",\"type\":\"string[]\"}],\"name\":\"createTable\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"desc\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int64\",\"name\":\"id\",\"type\":\"int64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"age\",\"type\":\"string\"}],\"name\":\"insert\",\"outputs\":[{\"internalType\":\"int32\",\"name\":\"\",\"type\":\"int32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int64\",\"name\":\"idLow\",\"type\":\"int64\"},{\"internalType\":\"int64\",\"name\":\"idHigh\",\"type\":\"int64\"}],\"name\":\"remove\",\"outputs\":[{\"internalType\":\"int32\",\"name\":\"\",\"type\":\"int32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int64\",\"name\":\"id\",\"type\":\"int64\"}],\"name\":\"remove\",\"outputs\":[{\"internalType\":\"int32\",\"name\":\"\",\"type\":\"int32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int64\",\"name\":\"idLow\",\"type\":\"int64\"},{\"internalType\":\"int64\",\"name\":\"idHigh\",\"type\":\"int64\"}],\"name\":\"select\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int64\",\"name\":\"id\",\"type\":\"int64\"}],\"name\":\"select\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int64\",\"name\":\"id\",\"type\":\"int64\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"age\",\"type\":\"string\"}],\"name\":\"update\",\"outputs\":[{\"internalType\":\"int32\",\"name\":\"\",\"type\":\"int32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int64\",\"name\":\"idLow\",\"type\":\"int64\"},{\"internalType\":\"int64\",\"name\":\"idHigh\",\"type\":\"int64\"}],\"name\":\"update\",\"outputs\":[{\"internalType\":\"int32\",\"name\":\"\",\"type\":\"int32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"
    };

    public static final String ABI = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", ABI_ARRAY);

    public static final String FUNC_COUNT = "count";

    public static final String FUNC_CREATETABLE = "createTable";

    public static final String FUNC_DESC = "desc";

    public static final String FUNC_INSERT = "insert";

    public static final String FUNC_REMOVE = "remove";

    public static final String FUNC_SELECT = "select";

    public static final String FUNC_UPDATE = "update";

    public static final Event CREATERESULT_EVENT =
            new Event(
                    "CreateResult",
                    Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));;

    public static final Event INSERTRESULT_EVENT =
            new Event(
                    "InsertResult",
                    Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));;

    public static final Event REMOVERESULT_EVENT =
            new Event(
                    "RemoveResult",
                    Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));;

    public static final Event UPDATERESULT_EVENT =
            new Event(
                    "UpdateResult",
                    Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));;

    protected TableTestV320(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public static String getABI() {
        return ABI;
    }

    public List<CreateResultEventResponse> getCreateResultEvents(
            TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList =
                extractEventParametersWithLog(CREATERESULT_EVENT, transactionReceipt);
        ArrayList<CreateResultEventResponse> responses =
                new ArrayList<CreateResultEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            CreateResultEventResponse typedResponse = new CreateResultEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.count = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<InsertResultEventResponse> getInsertResultEvents(
            TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList =
                extractEventParametersWithLog(INSERTRESULT_EVENT, transactionReceipt);
        ArrayList<InsertResultEventResponse> responses =
                new ArrayList<InsertResultEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            InsertResultEventResponse typedResponse = new InsertResultEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.count = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<RemoveResultEventResponse> getRemoveResultEvents(
            TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList =
                extractEventParametersWithLog(REMOVERESULT_EVENT, transactionReceipt);
        ArrayList<RemoveResultEventResponse> responses =
                new ArrayList<RemoveResultEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            RemoveResultEventResponse typedResponse = new RemoveResultEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.count = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<UpdateResultEventResponse> getUpdateResultEvents(
            TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList =
                extractEventParametersWithLog(UPDATERESULT_EVENT, transactionReceipt);
        ArrayList<UpdateResultEventResponse> responses =
                new ArrayList<UpdateResultEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            UpdateResultEventResponse typedResponse = new UpdateResultEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.count = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public BigInteger count(BigInteger idLow, BigInteger idHigh) throws ContractException {
        final Function function =
                new Function(
                        FUNC_COUNT,
                        Arrays.<Type>asList(new Int64(idLow), new Int64(idHigh)),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Uint32>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public TransactionReceipt createTable(
            String tableName, BigInteger keyOrder, String key, List<String> fields) {
        final Function function =
                new Function(
                        FUNC_CREATETABLE,
                        Arrays.<Type>asList(
                                new Utf8String(tableName),
                                new Uint8(keyOrder),
                                new Utf8String(key),
                                new DynamicArray<Utf8String>(
                                        Utf8String.class,
                                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(
                                                fields, Utf8String.class))),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String createTable(
            String tableName,
            BigInteger keyOrder,
            String key,
            List<String> fields,
            TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_CREATETABLE,
                        Arrays.<Type>asList(
                                new Utf8String(tableName),
                                new Uint8(keyOrder),
                                new Utf8String(key),
                                new DynamicArray<Utf8String>(
                                        Utf8String.class,
                                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(
                                                fields, Utf8String.class))),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForCreateTable(
            String tableName, BigInteger keyOrder, String key, List<String> fields) {
        final Function function =
                new Function(
                        FUNC_CREATETABLE,
                        Arrays.<Type>asList(
                                new Utf8String(tableName),
                                new Uint8(keyOrder),
                                new Utf8String(key),
                                new DynamicArray<Utf8String>(
                                        Utf8String.class,
                                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(
                                                fields, Utf8String.class))),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple4<String, BigInteger, String, List<String>> getCreateTableInput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_CREATETABLE,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<Utf8String>() {},
                                new TypeReference<Uint8>() {},
                                new TypeReference<Utf8String>() {},
                                new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple4<String, BigInteger, String, List<String>>(
                (String) results.get(0).getValue(),
                (BigInteger) results.get(1).getValue(),
                (String) results.get(2).getValue(),
                convertToNative((List<Utf8String>) results.get(3).getValue()));
    }

    public Tuple1<BigInteger> getCreateTableOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function =
                new Function(
                        FUNC_CREATETABLE,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Int256>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>((BigInteger) results.get(0).getValue());
    }

    public Tuple2<String, List<String>> desc() throws ContractException {
        final Function function =
                new Function(
                        FUNC_DESC,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<Utf8String>() {},
                                new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<String, List<String>>(
                (String) results.get(0).getValue(),
                convertToNative((List<Utf8String>) results.get(1).getValue()));
    }

    public TransactionReceipt insert(BigInteger id, String name, String age) {
        final Function function =
                new Function(
                        FUNC_INSERT,
                        Arrays.<Type>asList(
                                new Int64(id), new Utf8String(name), new Utf8String(age)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String insert(BigInteger id, String name, String age, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_INSERT,
                        Arrays.<Type>asList(
                                new Int64(id), new Utf8String(name), new Utf8String(age)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForInsert(BigInteger id, String name, String age) {
        final Function function =
                new Function(
                        FUNC_INSERT,
                        Arrays.<Type>asList(
                                new Int64(id), new Utf8String(name), new Utf8String(age)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple3<BigInteger, String, String> getInsertInput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_INSERT,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<Int64>() {},
                                new TypeReference<Utf8String>() {},
                                new TypeReference<Utf8String>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<BigInteger, String, String>(
                (BigInteger) results.get(0).getValue(),
                (String) results.get(1).getValue(),
                (String) results.get(2).getValue());
    }

    public Tuple1<BigInteger> getInsertOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function =
                new Function(
                        FUNC_INSERT,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Int32>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>((BigInteger) results.get(0).getValue());
    }

    public TransactionReceipt remove(BigInteger idLow, BigInteger idHigh) {
        final Function function =
                new Function(
                        FUNC_REMOVE,
                        Arrays.<Type>asList(new Int64(idLow), new Int64(idHigh)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String remove(BigInteger idLow, BigInteger idHigh, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_REMOVE,
                        Arrays.<Type>asList(new Int64(idLow), new Int64(idHigh)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRemove(BigInteger idLow, BigInteger idHigh) {
        final Function function =
                new Function(
                        FUNC_REMOVE,
                        Arrays.<Type>asList(new Int64(idLow), new Int64(idHigh)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple2<BigInteger, BigInteger> getRemoveInt64Int64Input(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_REMOVE,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<Int64>() {}, new TypeReference<Int64>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<BigInteger, BigInteger>(
                (BigInteger) results.get(0).getValue(), (BigInteger) results.get(1).getValue());
    }

    public Tuple1<BigInteger> getRemoveInt64Int64Output(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function =
                new Function(
                        FUNC_REMOVE,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Int32>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>((BigInteger) results.get(0).getValue());
    }

    public TransactionReceipt remove(BigInteger id) {
        final Function function =
                new Function(
                        FUNC_REMOVE,
                        Arrays.<Type>asList(new Int64(id)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String remove(BigInteger id, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_REMOVE,
                        Arrays.<Type>asList(new Int64(id)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRemove(BigInteger id) {
        final Function function =
                new Function(
                        FUNC_REMOVE,
                        Arrays.<Type>asList(new Int64(id)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple1<BigInteger> getRemoveInt64Input(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_REMOVE,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Int64>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>((BigInteger) results.get(0).getValue());
    }

    public Tuple1<BigInteger> getRemoveInt64Output(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function =
                new Function(
                        FUNC_REMOVE,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Int32>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>((BigInteger) results.get(0).getValue());
    }

    public List select(BigInteger idLow, BigInteger idHigh) throws ContractException {
        final Function function =
                new Function(
                        FUNC_SELECT,
                        Arrays.<Type>asList(new Int64(idLow), new Int64(idHigh)),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public Tuple2<String, String> select(BigInteger id) throws ContractException {
        final Function function =
                new Function(
                        FUNC_SELECT,
                        Arrays.<Type>asList(new Int64(id)),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<Utf8String>() {},
                                new TypeReference<Utf8String>() {}));
        List<Type> results = executeCallWithMultipleValueReturn(function);
        return new Tuple2<String, String>(
                (String) results.get(0).getValue(), (String) results.get(1).getValue());
    }

    public TransactionReceipt update(BigInteger id, String name, String age) {
        final Function function =
                new Function(
                        FUNC_UPDATE,
                        Arrays.<Type>asList(
                                new Int64(id), new Utf8String(name), new Utf8String(age)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String update(BigInteger id, String name, String age, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_UPDATE,
                        Arrays.<Type>asList(
                                new Int64(id), new Utf8String(name), new Utf8String(age)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForUpdate(BigInteger id, String name, String age) {
        final Function function =
                new Function(
                        FUNC_UPDATE,
                        Arrays.<Type>asList(
                                new Int64(id), new Utf8String(name), new Utf8String(age)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple3<BigInteger, String, String> getUpdateInt64StringStringInput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_UPDATE,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<Int64>() {},
                                new TypeReference<Utf8String>() {},
                                new TypeReference<Utf8String>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<BigInteger, String, String>(
                (BigInteger) results.get(0).getValue(),
                (String) results.get(1).getValue(),
                (String) results.get(2).getValue());
    }

    public Tuple1<BigInteger> getUpdateInt64StringStringOutput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function =
                new Function(
                        FUNC_UPDATE,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Int32>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>((BigInteger) results.get(0).getValue());
    }

    public TransactionReceipt update(BigInteger idLow, BigInteger idHigh) {
        final Function function =
                new Function(
                        FUNC_UPDATE,
                        Arrays.<Type>asList(new Int64(idLow), new Int64(idHigh)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String update(BigInteger idLow, BigInteger idHigh, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_UPDATE,
                        Arrays.<Type>asList(new Int64(idLow), new Int64(idHigh)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForUpdate(BigInteger idLow, BigInteger idHigh) {
        final Function function =
                new Function(
                        FUNC_UPDATE,
                        Arrays.<Type>asList(new Int64(idLow), new Int64(idHigh)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple2<BigInteger, BigInteger> getUpdateInt64Int64Input(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_UPDATE,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<Int64>() {}, new TypeReference<Int64>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<BigInteger, BigInteger>(
                (BigInteger) results.get(0).getValue(), (BigInteger) results.get(1).getValue());
    }

    public Tuple1<BigInteger> getUpdateInt64Int64Output(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function =
                new Function(
                        FUNC_UPDATE,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Int32>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>((BigInteger) results.get(0).getValue());
    }

    public static TableTestV320 load(
            String contractAddress, Client client, CryptoKeyPair credential) {
        return new TableTestV320(contractAddress, client, credential);
    }

    public static TableTestV320 deploy(Client client, CryptoKeyPair credential)
            throws ContractException {
        return deploy(
                TableTestV320.class,
                client,
                credential,
                getBinary(client.getCryptoSuite()),
                getABI(),
                null,
                null);
    }

    public static class CreateResultEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger count;
    }

    public static class InsertResultEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger count;
    }

    public static class RemoveResultEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger count;
    }

    public static class UpdateResultEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger count;
    }
}
